/**
 * @author jay.zhoujingjie
 */
/**
 * action参数
 * @type {{sortName: string, sortValue: string}}
 */
var args = {
    sortName : "",
    sortValue: ""
}
var config =
{
    gridId     : "#menu_table_grid",      //tree id
    winId      : "#menu_window",    //弹出框ID
    parentNodes: {
        id       : "#menu_form_parentNodes",   //父节点id
        pid      : 0,
        combotree: {
            width  : "200",
            onClick: function (node)
            {
                // 如果选中的节点是自身就无效;
                var id = $("#menu_form :hidden[data-key='id']").val();
                var pid = $("#menu_form :hidden[data-key='pid']").val();
                if (node.id == id)
                {
                    opmex.alert("不能选择自己作为父节点.", function ()
                    {
                        $(config.parentNodes.id).combotree("setValue", config.parentNodes.pid);
                    });
                }
            }
        }
    },
    authKey    : {
        id       : "#menu_form_input_AuthKey",
        combotree: {
            editable: true,
            width   : 200,
            url     : location.path + "authorityAction!queryAuthorities.action",
            onClick : function (node)
            {
                $(config.authKey.id).combotree("setValue", node.attributes.authKey);
            }
        }
    },
    model      : null,
    data       : null,// treegrid数据
    iconData   : null, // 图标数据
    modelValue : {
        add      : "add",
        addValue : "添加",
        edit     : "edit",
        editValue: "保存"
    },
    events     : {
        // 显示Win DIV
        showWin      : function ()
        {
            $("#menu_window").window("open");
        },
        // 隐藏Win div
        hideWin      : function ()
        {
            // 在使用 $("#menu_window").window("close");的时候js会出错,所以用以下方式关闭
            $(".window-shadow,.window-mask,.window").hide();
            // 删除验证class并且隐藏提示/.
            $(".data-validate").removeClass("data-validate-true").mouseout();
        },
        // 获得已选中的行
        getSelections: function ()
        {
            return $(config.gridId).treegrid("getSelections");
        },
        // 清楚弹出div的值
        clearWinValue: function ()
        {
            // /清空所有值
            $(config.winId).find("[data-clear='true']").each(function ()
            {
                $(this).val(null);
            });
            // 清除权限值
            // $(config.winId).find("input[name='menu.authKey']").val(null);
            $(config.authKey.id).combotree("setValue", "");
            $("#menu_form_select_icons").combo("setValue", "");
        },
        // 设置弹出div的值
        setWinValue  : function (selectedNode, isView)
        {
            config.events.clearWinValue();
            //如果是编辑
            if (config.model == config.modelValue.edit)
            {
                // 名称
                $(config.winId).find("[data-key='name']").val(selectedNode.name);
                // 父节点
                $(config.parentNodes.id).combotree("setValue", selectedNode.pid);
                config.parentNodes.pid = selectedNode.pid;
                // id
                $(config.winId).find("[data-key='id']").val(selectedNode.id);
                // 顺序
                $("#menu_form_input_seq").numberspinner("setValue", selectedNode.seq);
                // 是否启用
                $(config.winId).find("[data-key='checkbox']")
                    .attr("checked", selectedNode.isEnable);
                // 权限值 -- 不可更改
                // $(config.winId).find("[data-key='authKey']").val(selectedNode.authKey).attr("readonly",
                // "readonly");
                $(config.authKey.id).combotree("setValue", selectedNode.authKey);
                // 图标
                $("td.jsTdIcons .combo-text").val(config.iconData[selectedNode.icon]);
                $("#menu_form_select_icons").combo("setValue", selectedNode.icon);
                var url = selectedNode.url;
                if (url.indexOf("http") != 0)
                {
                    url = location.origin + location.path + selectedNode.url;
                }
                // url
                $(config.winId).find("[data-key='url']").val(url);
                // 描述
                $(config.winId).find("[data-key='remark']").val(selectedNode.remark);
                $("#menu_div_buttons_btn_ok").linkbutton(
                    {
                        text: "保存"
                    });
            } else
            {
                // 父节点
                $(config.parentNodes.id)
                    .combotree("setValue", selectedNode ? selectedNode.id : "0");
                // url
                $(config.winId).find("[data-key='url']").val(location.origin + location.path);
                // 是否启用-默认启用
                $(config.winId).find("[data-key='checkbox']").attr("checked", true);
                // 顺序：默认为5
                $("#menu_form_input_seq").numberspinner("setValue", 5);
                $("#menu_div_buttons_btn_ok").linkbutton(
                    {
                        text: "添加"
                    });
            }
            //如果是查看
            if (isView)
            {
                $("#menu_form :text,#menu_form textarea").attr("readonly", true);
                $("#menu_div_buttons_btn_reset,#menu_div_buttons_btn_ok").hide();
            } else
            {
                $("#menu_form :text,#menu_form textarea").attr("readonly", false);
                $("#menu_div_buttons_btn_reset,#menu_div_buttons_btn_ok").show();
            }
        },
        // 绑定事件
        bindEvents   : function ()
        {
            $("#menu_form_tr_authKey input.combo-text").on(
                {
                    blur: function ()
                    {
                        $(config.authKey.id).combotree("setValue", this.value);
                    }
                });
            // 验证用户名是否相同
            $("#menu_form input[data-key='name']").blur(function ()
            {
                var value = this.value.trim();
                var $this = $(this);
                config.data.rows.forEach(function (d)
                {
                    if (value == d.name)
                    {
                        $this.mouseover();
                        $this.select();
                        return;
                    }
                });
            });
        },
        // 保存
        save         : function ()
        {
            $("#menu_form_td_checkbox :checkbox").val($("#menu_form_js_checkbox :checked").length == 1);
            if (!$("#menu_form").form("validate"))
            {
                return;
            }
            //还原url
            $("#menu_form input[data-key='url']").val(
                $("#menu_form input[data-key='url']").val().replace(location.origin + location.path, "")
            )
            //console.log(!!$("#menu_form_td_checkbox :checkbox").val())
            $("#menu_form_td_checkbox :checkbox").val(!!$("#menu_form_td_checkbox :checkbox").val())
            $.request(
                {
                    url     : location.path + "menuAction!saveOrUpdate.action?uuid="
                        + (config.model == config.modelValue.add ? "0" : "1"),
                    data    : $("#menu_form").serialize(),
                    type    : "post",
                    dataType: "json",
                    success : function (result)
                    {
                        var result = typeof result == "object" ? result : {type: result}
                        if (result.data == "ok" || result.type == "ok")
                        {
                            config.events.hideWin();
                            opmex.alert(config.modelValue[config.model + "Value"] + "成功!!");
                            config.events.loadData();
                        }
                    }
                });
        },
        // 删除节点
        deleteNode   : function ()
        {
            var checked = $(config.gridId).treegrid("getSelections");
            var checkedIds = [];
            checked.forEach(function (d)
            {
                var children = $(config.gridId).treegrid("getChildren", d.id);
                children.forEach(function (child)
                {
                    checkedIds.push(child.id);
                });
                checkedIds.push(d.id);
            });
            checkedIds = checkedIds.unique();
            $.request(
                {
                    url     : location.path + "menuAction!deleteNodeByIds.action?uuid="
                        + checkedIds.join(","),
                    dataType: "json",
                    success : function (data)
                    {
                        if (data > 0)
                        {
                            checked.forEach(function (d)
                            {
                                $(config.gridId).treegrid("remove", d.id);
                            });
                        }
                    }
                });
        },
        //加载menu菜单
        loadTreeData : function ()
        {
            // 加载treegrid
            $.request(
                {
                    url     : location.path + '/menuAction!queryMenus.action?_dt=' + new Date().getTime(),
                    data    : args,
                    dataType: "json",
                    success : function (data)
                    {
                        // data = JSON.parse(data);
                        data.rows.forEach(function (d)
                        {
                            if (d._parentId == "0")
                                d._parentId = Number(d._parentId);
                        });
                        data.rows.map(function (d)
                        {
                            d.iconCls = d.icon;
                            return d;
                        });
                        config.data = data;
                        $(config.gridId).treegrid("loadData", data);
                    }
                });
        },
        // 加载数据
        loadData     : function ()
        {
            config.events.loadTreeData();
            // 加载父节点
            $.request(
                {
                    url     : location.path + '/menuAction!getBusinessTree.action?_dt='
                        + new Date().getTime(),
                    dataType: "json",
                    success : function (data)
                    {
                        $(config.parentNodes.id).combotree("loadData", data);
                    }
                });
        },
        // 工具栏
        toolbar      : {
            // 新增
            add      : function ()
            {
                var selections = config.events.getSelections();
                if (selections.length > 1)
                {
                    opmex.alert("最多选择一行数据!");
                    return;
                }
                config.model = config.modelValue.add;
                config.events.setWinValue(selections.length === 0 ? null : selections[0]);
                config.events.showWin();
            },
            // 修改
            edit     : function ()
            {
                var selections = config.events.getSelections();
                if (selections.length != 1)
                {
                    opmex.alert("请选择一行数据!");
                } else
                {
                    config.model = config.modelValue.edit;
                    config.events.setWinValue(selections[0]);
                    config.events.showWin();
                }
            },
            // 移除
            remove   : function ()
            {
                var selections = config.events.getSelections();
                if (selections.length < 1)
                {
                    opmex.alert("请至少选择一行数据!");
                    return;
                }
                $.messager.confirm("温馨提示", "删除时,被选中菜单的子菜单也会被删除,是否确认删除?", function (r)
                {
                    if (r)
                    {
                        config.events.deleteNode();
                    }
                });
            },
            //查看菜单
            viewMenu : function (row)
            {
                if (!row)
                {
                    row = config.events.getSelections();
                    if (row == null || row.length != 1)
                    {
                        opmex.alert("请选择一行数据.");
                        return;
                    }
                    row = row[0];
                }
                config.model = config.modelValue.edit;
                config.events.setWinValue(row, true);
                config.events.showWin();
            },
            //启用
            enable   : function ()
            {
                config.events.toolbar._setState(1);
            },
            //禁用
            disable  : function ()
            {
                config.events.toolbar._setState(0);
            },
            //设置状态---外部勿调用 state> 1:启用 0:禁用
            _setState: function (state)
            {
                if (state != 0 && state != 1)
                {
                    opmex.alert("非法参数");
                    return;
                }
                var row = config.events.getSelections();
                if (row == null || row.length < 1)
                {
                    opmex.alert("请至少选择一行!");
                    return;
                }
                row = row.map(function (d)
                {
                    return d.id;
                });
                $.request({
                    url     : location.path + "menuAction!setState.action?uuid=" + row.join(",") + "&id=" + state,
                    dataType: "json",
                    success : function (result)
                    {
                        if (result && result.result >= 1)
                        {
                            opmex.alert("操作成功!");
                            config.events.loadTreeData();
                        } else
                        {
                            opmex.alert("操作失败!");
                        }
                    }
                })
            }
        }
    }
};
/**
 * 菜单数
 *
 * @author jay.zhoujingjie
 */
$(config.gridId).treegrid(
    {
        rownumbers   : true,    //行号
        animate      : true,   //动画
        collapsible  : true,
        fitColumns   : true,
        toolbar      : "#menu_div_toolbar", //工具栏
        // selectOnCheck: false,
        // checkOnSelect: false,
        singleSelect : false,    //单选
        // url : location.path + '/menuAction!queryMenus.action',
        method       : 'get',    //请求方式
        idField      : 'id',
        remoteSort   : true,   //远程排序
        multiSort    : false,  //多列排序
        pagination   : false,   //页码
        treeField    : 'name',
        onContextMenu: function (e, node)//右键事件
        {
            e.preventDefault();
            $(this).treegrid('select', node.id);
            $('#menu_js_contextMenu').menu('show',
                {
                    left: e.pageX,
                    top : e.pageY
                });
        },
        columns      : [           //列头
            [
                {
                    field : '_parentId',
                    hidden: true
                },
                {
                    field : 'id',
                    hidden: true
                },
                {
                    field    : 'name',
                    title    : '菜单名称',
                    width    : 180,
                    sortable : true,
                    resizable: true
                },
                {
                    field    : 'url',
                    title    : 'URL路径',
                    width    : 180,
                    align    : 'left',
                    formatter: function (value)
                    {
                        if (value.indexOf("http") != 0)
                        {
                            value = location.origin + location.path + value;
                        }
                        return value;
                    }
                },
                {
                    field   : 'seq',
                    title   : '排序',
                    width   : 80,
                    align   : 'right',
                    sortable: true
                },
                {
                    field   : 'authKey',
                    title   : '权限值',
                    width   : 180,
                    sortable: true
                },
                {
                    field    : 'isEnable',
                    title    : '是否启用',
                    width    : 80,
                    formatter: function (value, row, index)
                    {
                        return value ? "是" : "否";
                    }
                },
                {
                    field: 'remark',
                    title: '菜单描述',
                    width: 180
                }
            ]
        ],
        onLoadSuccess: function ()   //加载成功事件
        {
            $(".datagrid-body")
                .mousedown(function (e)
                {
                    e.preventDefault();
                    config.mousedown = true;
                    if (!e.ctrlKey)
                    {
                        var selections = config.events.getSelections();
                        selections.forEach(function (d)
                        {
                            $(config.gridId).treegrid("unselect", d.id);
                        });
                    }
                })
                .mouseup(function ()
                {
                    config.mousedown = false;
                });
            $(".datagrid-body tr").mousemove(function (e)
            {
                if (config.mousedown)
                {
                    var id = $(this).attr("node-id")
                    $(config.gridId).treegrid("select", id);
                }
            });
        },
        //排序触发
        onSortColumn : function ()
        {
            args.sortName = arguments[0];
            args.sortValue = arguments[1];
            config.events.loadTreeData();
        },
        onClickRow   : function (data)              //点击行事件
        {
            if (event.ctrlKey)
            {
                return;
            }
            var selections = config.events.getSelections();
            if (selections)
            {
                selections.forEach(function (d)
                {
                    if (d.id != data.id)
                    {
                        $(config.gridId).treegrid("unselect", d.id);
                    }
                });
            }
        },
        onDblClickRow: function (row)           //双击一行事件
        {
            config.events.toolbar.viewMenu(row);
        }
    });
/**
 * 父节点combotree
 *
 * @author jay.zhoujingjie
 */
$(config.parentNodes.id).combotree(config.parentNodes.combotree);
/**
 * 权限值父节点combotree
 *
 * @author jay.zhoujingjie
 */
$(config.authKey.id).combotree(config.authKey.combotree);
/**
 * 查询图标
 *
 * @author jay.zhoujingjie
 */
$.request(
    {
        url     : location.path + '/menuAction!queryIcons.action?_dt=' + new Date().getTime(),
        dataType: "json",
        success : function (data)
        {
            config.iconData = {};
            //图标模板
            var optionsTemplate = '<div data-value="#value#" data-name="#name#"><span class="img"><img src="'
                + location.path
                + 'jslib/easyui/themes/icons/#src#.png"/></span><span>#value#</span><div class="clear"></div></div>';
            var options = "";
            data.forEach(function (d)
            {
                options += optionsTemplate.replace(/#name#/g, d.name).replace(/#src#/g,
                    d.name.split("-")[1]).replace(/#value#/g, d.value);
                config.iconData[d.name] = d.value;
            });
            $("#menu_form_select_icons").combo(
                {
                    editable: false
                });
            // $('#cc').combo('panel').append(options);
            $('#menu_form_div_sp').html(options);
            $('#menu_form_div_sp').appendTo($('#menu_form_select_icons').combo('panel'));
            $("#menu_form_div_sp img").error(function ()
            {
                $(this).remove();
            });
            $('#menu_form_div_sp div').click(
                function ()
                {
                    var value = $(this).attr("data-name");
                    var text = $(this).attr("data-value");
                    $('#menu_form_select_icons').combo('setValue', value).combo('setText', text).combo(
                        'hidePanel');
                });
            // 加载数据
            config.events.loadData();
        }

    });
/**
 * 隐藏win窗口,不能设置为初始化隐藏
 */
config.events.hideWin();
/**
 * 绑定事件
 *
 * @author jay.zhoujingjie
 */
config.events.bindEvents();
